以 Jetson Nano 的邊緣裝置的定位,適合拿來做神經網路推論,並不適合(也不合理)跑神經網路訓練,即使可以跑也是會等到天荒地老。既然如此,拿 google 提供免費的 colab 來訓練如何?今天就來用簡單幾個指令,把原本在 Jetson Nano 跑的訓練搬上 colab!
不認識植物?AI認識! (source: NVIDIA)
這次要訓練的資料集為 PlantCLEF 2017,涵蓋 20 種植物類別影像資料,總共 10,475 訓練資料、1155驗證資料與30張測試資料,總檔案大小為 1.5GB,可於這裡下載。 20 種植物類別如下:
筆者已經把 colab 的訓練模型寫成一個範例,其實就只是把在 Jetson Nano 上執行的幾個指令搬上 colab 而已,流程如下:
唯一有參數做調整的就在於訓練的指令
!python3 train.py --model-dir=models/plants data/PlantCLEF_Subset --arch=googlenet --batch-size=32 --epochs=50
這邊有幾個參數選項可以做設定
這些都可以嘗試自行調整看看,完整說明可參照 pytorch-classification 專案。
大約不到兩分鐘可以完成一次訓練,經過30次訓練後模型 TOP-1 精確度約可提高到 70%。
訓練結束後將 pytorch 模型轉為 ONNX 格式,如果你是用 RestNet-18 檔名會是 resnet.onnx
,若是 GoogleNet 則檔名為 googlenet.onnx
,以此類推。最後就是將其下載回來放到 Jetson Nano 做推論了!
接下來就是回到 Jetson Nano 上,把剛訓練好的模型拿來做推論,或是也可以直接拿 NVIDIA 訓練100次的ResNet-18模型來做測試與比對。
由於在 Jetson Nano 上沒有測試資料,我們還是要重新在 Jetson Nano 上下載資料集,或是也可以從剛剛執行的 colab 上把測試資料打包下載回來。
cd jetson-inference/python/training/classification/data
wget https://nvidia.box.com/shared/static/vbsywpw5iqy7r38j78xs0ctalg7jrg79.gz -O PlantCLEF_Subset.tar.gz
tar xvzf PlantCLEF_Subset.tar.gz
此外也把剛剛從 colab 訓練好的模型也一併搬過來
cd PlantCLEF_Subset/
mv ~/Downloads/googlenet.onnx
進到 Docker 推論的容器環境
cd ~/jetson-inference/
docker/run.sh
輸入指令進行推論,一次將 30 張測試資料批量推論,一樣在第一次載入模型時會經過 TensorRT 的轉換與加速。
cd /jetson-inference/python/training/classification/data/PlantCLEF_Subset
imagenet.py --model=googlenet.onnx --input_blob=input_0 --output_blob=output_0 --labels=labels.txt "test/*.jpg" "test/output_%i.jpg"
完成後可以在資料夾看到 output_0.jpg ~ output_29.jpg 的推論結果
截至目前為止影像分類的部分將告一段落,不知道各位是否覺得在 Jetson Nano 這個邊緣裝置跑推論很容易操作呢?明天開始將進入到物件偵測的環節啦! keep fighting!!